<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Add a 3D model with threebox</title>
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
    <link href="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css" rel="stylesheet">
    <script src="https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.js"></script>
    <style>
        body {
            margin: 0;
            padding: 0;
        }

        #map {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
        }
    </style>
</head>

<body>
    <script src="https://cdn.jsdelivr.net/gh/jscastro76/threebox@v.2.2.2/dist/threebox.min.js"
        type="text/javascript"></script>
    <link href="https://cdn.jsdelivr.net/gh/jscastro76/threebox@v.2.2.2/dist/threebox.css" rel="stylesheet">
    <div id="map"></div>
    <script>
        mapboxgl.accessToken = 'pk.eyJ1IjoiY2hlbmdjaGFvY2hhbyIsImEiOiJjbGU1aDZ2eWUwMXp4M29udmFnNnNyZjBhIn0.2Kd0ZX06ReEdBnZ9XU4XUA';
        const map = new mapboxgl.Map({
            container: 'map',
            // Choose from Mapbox's core styles, or make your own style with Mapbox Studio
            style: 'mapbox://styles/mapbox/light-v11',
            center: [114.30, 30.50],
            zoom: 16,
            pitch: 64.9,
            antialias: true // create the gl context with MSAA antialiasing, so custom layers are antialiased
        });

        // eslint-disable-next-line no-undef
        const tb = (window.tb = new Threebox(
            map,
            map.getCanvas().getContext('webgl'),
            {
                defaultLights: true
            }
        ));

        map.on('style.load', () => {
            map.addLayer({
                id: 'custom-threebox-model',
                type: 'custom',
                renderingMode: '3d',
                onAdd: function () {
                    // Creative Commons License attribution:  Metlife Building model by https://sketchfab.com/NanoRay
                    // https://sketchfab.com/3d-models/metlife-building-32d3a4a1810a4d64abb9547bb661f7f3
                    const scale = 0.005;
                    const options = {
                        obj: '/data/build.gltf',
                        type: 'gltf',
                        units: 'meters',
                        rotation: { x: 90, y: 180, z: 0 },
                        scale
                    };

                    tb.loadObj(options, (model) => {
                        model.setCoords([114.30, 30.50]);
                        tb.add(model);
                    });
                },

                render: function () {
                    tb.update();
                }
            });
        });
    </script>

</body>

</html>